/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package manager.modulo.ordemservico.fonte;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Calendar;
import java.util.HashMap;
import java.util.LinkedList;
import javax.swing.JOptionPane;
import manager.auxiliares.Configurations;
import manager.auxiliares.DateConverter;
import manager.auxiliares.DateFormat;
import manager.auxiliares.MensagemExcessao;
import manager.modulo.ordemservico.dao.AvaliacaoOrdemServicoDao;
import manager.modulo.ordemservico.dao.UnidadeAtendimentoDao;
import manager.modulo.ordemservico.enumerator.EnumSituacaoOrdemServico;
import manager.modulo.ordemservico.enumerator.EnumSituacaoOrdemServico.SituacaoOS;
import manager.principal.fonte.JanelaLogin;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;

/**
 *
 * @author THIAGO
 */
public class PainelAvaliacao extends javax.swing.JPanel {

    /**
     * Creates new form PainelAvaliacao
     */
    public PainelAvaliacao() {
        try {
            initComponents();

            configurarPainel();
        } catch (Exception e) {
            MensagemExcessao.mostrarMensagem(e, "Avaliações de Ordens de Serviço");
        }
    }

    public void configurarPainel() throws SQLException {
        LinkedList<String> listaUnidade = UnidadeAtendimentoDao.buscaListaUnidadePorUsuario(JanelaLogin.getUsuario().getId());
        jComboBox1.addItem("SELECIONE UMA UNIDADE DE ATENDIMENTO");
        jComboBox8.addItem("SELECIONE UMA UNIDADE DE ATENDIMENTO");
        for (int i = 0; i < listaUnidade.size(); i++) {
            jComboBox1.addItem(listaUnidade.get(i));
            jComboBox8.addItem(listaUnidade.get(i));
        }

        Calendar dataAtual = Calendar.getInstance();
        dataAtual.setTimeInMillis(DateConverter.getDataAtualBancoDados().getTime());
        jComboBox3.setSelectedIndex(dataAtual.get(Calendar.MONTH));
        jComboBox5.setSelectedIndex(dataAtual.get(Calendar.MONTH));
        jComboBox4.setSelectedItem(Integer.toString(dataAtual.get(Calendar.YEAR)));
        jComboBox7.setSelectedItem(Integer.toString(dataAtual.get(Calendar.YEAR)));
    }

    public int calcularTotal(HashMap hashMap){
        if(hashMap.containsKey("quantidade")){
            int quantidade = (Integer)hashMap.get("quantidade");
            int avaliacaoA1 = ((Integer)hashMap.get("avaliacaoA1") * 3)/quantidade;
            int avaliacaoA2 = ((Integer)hashMap.get("avaliacaoA2") * 3)/quantidade;
            
            int porcentagemA3 = ((Integer)hashMap.get("avaliacaoA3")*100)/(quantidade*3);
            int avaliacaoA3 = 0;
            if(porcentagemA3 >= 90){
                avaliacaoA3 = 9;
            } else if( porcentagemA3 >= 80){
                avaliacaoA3 = 6;
            } else if( porcentagemA3 >= 70){
                avaliacaoA3 = 3;
            }
            int porcentagemB1 = ((Integer)hashMap.get("avaliacaoB1") * 100)/(quantidade*3);
            int avaliacaoB1 = 0;
             if(porcentagemB1 >= 90){
                avaliacaoB1 = 9;
            } else if( porcentagemB1 >= 80){
                avaliacaoB1 = 6;
            } else if( porcentagemB1 >= 70){
                avaliacaoB1 = 3;
            }
            int porcentagemB2 = ((Integer)hashMap.get("avaliacaoB2") * 100)/(quantidade*3);
            int avaliacaoB2 = 0;
             if(porcentagemB2 >= 90){
                avaliacaoB2 = 9;
            } else if( porcentagemB2 >= 80){
                avaliacaoB2 = 6;
            } else if( porcentagemB2 >= 70){
                avaliacaoB2 = 3;
            }
            int porcentagemB3 = ((Integer)hashMap.get("avaliacaoB3") * 100)/(quantidade*3);
            int avaliacaoB3 = 0;
             if(porcentagemB3 >= 90){
                avaliacaoB3 = 9;
            } else if( porcentagemB3 >= 80){
                avaliacaoB3 = 6;
            } else if( porcentagemB3 >= 70){
                avaliacaoB3 = 3;
            }
             
             int total = avaliacaoA1 + avaliacaoA2 + avaliacaoA3 + avaliacaoB1 + avaliacaoB2 + avaliacaoB3;
             return total;
        }
        return 0;
    }
    
    public void imprimir(int idUnidadeAtendimento) {
        try {
            Timestamp dataInicio = new Timestamp(Integer.parseInt(jComboBox4.getSelectedItem().toString()) - 1900, jComboBox3.getSelectedIndex(), Integer.parseInt(jComboBox2.getSelectedItem().toString()), 0, 0, 0, 0);
            Timestamp dataFim = new Timestamp(Integer.parseInt(jComboBox7.getSelectedItem().toString()) - 1900, jComboBox5.getSelectedIndex(), Integer.parseInt(jComboBox6.getSelectedItem().toString()), 23, 59, 59, 0);
            HashMap parameters = AvaliacaoOrdemServicoDao.buscarResumoAvaliacao(AvaliacaoOrdemServicoDao.buscarOSAvaliadas(idUnidadeAtendimento, dataInicio, dataFim));
            parameters.put("total", calcularTotal(parameters));
            parameters.put("idUnidadeAtendimento", idUnidadeAtendimento);
            parameters.put("situacaoEmAberto", EnumSituacaoOrdemServico.ConverterEnumNumero(SituacaoOS.EMABERTO));
            parameters.put("situacaoFinalizada", EnumSituacaoOrdemServico.ConverterEnumNumero(SituacaoOS.FINALIZADA));
            parameters.put("dataInicio", dataInicio);

            parameters.put("dataFim", dataFim);


            InputStream is = this.getClass().getClassLoader().getResourceAsStream("manager/modulo/ordemservico/relatorio/Avaliacao.jasper");
            Connection connection = JanelaLogin.getConnection();
            JasperPrint relat = JasperFillManager.fillReport(is, parameters, connection);
            JasperViewer.viewReport(relat, false);

        } catch (Exception e) {
            MensagemExcessao.mostrarMensagem(e, "Avaliação Ordem de Serviço");
        }
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        jComboBox1 = new javax.swing.JComboBox();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jPanel2 = new javax.swing.JPanel();
        jComboBox2 = new javax.swing.JComboBox();
        jComboBox3 = new javax.swing.JComboBox();
        jLabel3 = new javax.swing.JLabel();
        jComboBox4 = new javax.swing.JComboBox();
        jComboBox6 = new javax.swing.JComboBox();
        jComboBox5 = new javax.swing.JComboBox();
        jComboBox7 = new javax.swing.JComboBox();
        jLabel4 = new javax.swing.JLabel();
        jComboBox8 = new javax.swing.JComboBox();
        jLabel5 = new javax.swing.JLabel();
        jButton2 = new javax.swing.JButton();

        setBackground(Configurations.getBackGroundColor());

        jPanel1.setBackground(Configurations.getBackGroundColor());
        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Avaliar Ordens de Serviços"));
        jPanel1.setLayout(null);

        jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/manager/images/avaliacao.png"))); // NOI18N
        jButton1.setText("Avaliar");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        jPanel1.add(jButton1);
        jButton1.setBounds(580, 48, 85, 23);

        jComboBox1.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                jComboBox1ItemStateChanged(evt);
            }
        });
        jPanel1.add(jComboBox1);
        jComboBox1.setBounds(20, 50, 460, 20);

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jLabel1.setText("Unidade de Atendimento");
        jPanel1.add(jLabel1);
        jLabel1.setBounds(20, 30, 170, 14);

        jLabel2.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jLabel2.setText("Pendentes");
        jPanel1.add(jLabel2);
        jLabel2.setBounds(490, 30, 70, 14);

        jTextField1.setText("0");
        jTextField1.setDisabledTextColor(new java.awt.Color(0, 0, 0));
        jTextField1.setEnabled(false);
        jPanel1.add(jTextField1);
        jTextField1.setBounds(490, 50, 80, 20);

        jPanel2.setBackground(Configurations.getBackGroundColor());
        jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Relatório de Avaliação de Ordem de Serviço"));
        jPanel2.setLayout(null);

        jComboBox2.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31" }));
        jPanel2.add(jComboBox2);
        jComboBox2.setBounds(300, 50, 37, 20);

        jComboBox3.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31" }));
        jPanel2.add(jComboBox3);
        jComboBox3.setBounds(340, 50, 37, 20);

        jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel3.setText("Início");
        jPanel2.add(jLabel3);
        jLabel3.setBounds(300, 30, 130, 14);

        jComboBox4.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "2011", "2012", "2013", "2014", "2015" }));
        jPanel2.add(jComboBox4);
        jComboBox4.setBounds(380, 50, 50, 20);

        jComboBox6.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31" }));
        jComboBox6.setSelectedIndex(30);
        jPanel2.add(jComboBox6);
        jComboBox6.setBounds(440, 50, 37, 20);

        jComboBox5.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31" }));
        jPanel2.add(jComboBox5);
        jComboBox5.setBounds(480, 50, 37, 20);

        jComboBox7.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "2011", "2012", "2013", "2014", "2015" }));
        jPanel2.add(jComboBox7);
        jComboBox7.setBounds(520, 50, 50, 20);

        jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel4.setText("Fim");
        jPanel2.add(jLabel4);
        jLabel4.setBounds(436, 30, 140, 14);

        jPanel2.add(jComboBox8);
        jComboBox8.setBounds(20, 50, 270, 20);

        jLabel5.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jLabel5.setText("Unidade de Atendimento");
        jPanel2.add(jLabel5);
        jLabel5.setBounds(20, 30, 170, 14);

        jButton2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/manager/images/export.png"))); // NOI18N
        jButton2.setText("Gerar");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });
        jPanel2.add(jButton2);
        jButton2.setBounds(580, 48, 79, 23);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 695, Short.MAX_VALUE)
            .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, 84, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(74, Short.MAX_VALUE))
        );
    }// </editor-fold>//GEN-END:initComponents

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        try {
            int idUnidadeAtendimento = UnidadeAtendimentoDao.buscarIdUnidadeAtendimentoPorIdentificador(jComboBox1.getSelectedItem().toString());
            if (idUnidadeAtendimento != 0) {
                LinkedList<LinkedList> tabela = AvaliacaoOrdemServicoDao.buscaTabela(UnidadeAtendimentoDao.buscarIdUnidadeAtendimentoPorIdentificador(jComboBox1.getSelectedItem().toString()));
                int quantidadePendente = tabela.get(0).size();
                if (quantidadePendente > 0) {
                    JanelaAvaliacaoOrdemServico janelaAvaliacaoOrdemServico = new JanelaAvaliacaoOrdemServico(idUnidadeAtendimento);
                } else {
                    JOptionPane.showMessageDialog(null, "Não existe ordens de serviços para serem avaliadas.", "Avaliação de Ordem de Serviço", JOptionPane.ERROR_MESSAGE);
                }
            } else {
                JOptionPane.showMessageDialog(null, "Selecione alguma unidade de atendimento.", "Avaliação de Ordens de Serviço", JOptionPane.ERROR_MESSAGE);
            }
        } catch (Exception e) {
            MensagemExcessao.mostrarMensagem(e, "Avaliação de Ordem de Serviço");
        }
    }//GEN-LAST:event_jButton1ActionPerformed

    private void jComboBox1ItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_jComboBox1ItemStateChanged
        try {
            if (jComboBox1.getSelectedItem().toString().equalsIgnoreCase("SELECIONE UMA UNIDADE DE ATENDIMENTO")) {
                jTextField1.setText("0");
            } else {
                LinkedList<LinkedList> tabela = AvaliacaoOrdemServicoDao.buscaTabela(UnidadeAtendimentoDao.buscarIdUnidadeAtendimentoPorIdentificador(jComboBox1.getSelectedItem().toString()));
                jTextField1.setText(Integer.toString(tabela.get(0).size()));
            }
        } catch (Exception e) {
            MensagemExcessao.mostrarMensagem(e, "Avaliação de Ordem de Serviço");
        }
    }//GEN-LAST:event_jComboBox1ItemStateChanged

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
        try {
            int idUnidadeAtendimento = UnidadeAtendimentoDao.buscarIdUnidadeAtendimentoPorIdentificador(jComboBox8.getSelectedItem().toString());
            if (idUnidadeAtendimento != 0) {
                imprimir(idUnidadeAtendimento);
            } else {
                JOptionPane.showMessageDialog(null, "Selecione alguma unidade de atendimento.", "Avaliação de Ordens de Serviço", JOptionPane.ERROR_MESSAGE);
            }
        } catch (Exception e) {
            MensagemExcessao.mostrarMensagem(e, "Avaliação de Ordem de Serviço");
        }
    }//GEN-LAST:event_jButton2ActionPerformed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JComboBox jComboBox1;
    private javax.swing.JComboBox jComboBox2;
    private javax.swing.JComboBox jComboBox3;
    private javax.swing.JComboBox jComboBox4;
    private javax.swing.JComboBox jComboBox5;
    private javax.swing.JComboBox jComboBox6;
    private javax.swing.JComboBox jComboBox7;
    private javax.swing.JComboBox jComboBox8;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JTextField jTextField1;
    // End of variables declaration//GEN-END:variables
}
